package com.woniuxy.utils;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.InvocationHandler;

import java.lang.reflect.Method;

/**
 * @Author: 马宇航
 * @Todo: 基于CgLib实现的工具类，由它帮忙创建代理类，扩展被代理类RbacManagerServiceCgLib
 * @DateTime: 22/08/22/0022 15:21
 * @Component: 成都蜗牛学苑
 **/
public class CgLibProxyInstance{
    /**
     * 通过传入一个被代理类，通过Cglib来动态生成一个子类，扩展被代理类！
     * ChangeLog : 1. 创建 ( 15:25 [马宇航]);
     * @param proxyedObject  被代理类
     * @return java.lang.Object 代理类 ： 被代理类 + 增强的方法
    */
    public Object createSon(Object proxyedObject){
        return Enhancer.create(proxyedObject.getClass(), new InvocationHandler() {
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                System.out.println("cglib增强了目标类的方法，进入前：");
                if (method.getName().startsWith("add")){//切入点 开头是add的方法

                }
                Object invoke = method.invoke(proxyedObject, objects);//反射执行目标方法的代码
                System.out.println("cglib增强了目标类的方法，执行后!");
                return invoke;
            }
        });
    }
}
